home *** CD-ROM | disk | FTP | other *** search
- /* swap two digits d1 d2 of a number n*/
-
- #include "defs.h"
-
- int am_swap(int n, int d1, int d2)
- {
-
- int dig[]={0,0,0,0,0,0,0,0,0,0};
- int t=n,x=0,j=0,i;
-
- if(n>999999999)
- return n;
- if(n<0){
- n = -n;
- t = n;
- x=1;
- }
-
- if(d1<0)
- d1 = -d1;
- if(d1>9){
- for(i = 0; i < 9; i++)
- while(d1 >= _am_asciiconv[i])
- d1 -= _am_asciiconv[i];
- while(d1 >= _am_asciiconv[i])
- {
- d1 -= _am_asciiconv[i];
- j++;
- }
- d1=j;
- j=0;
- }
- if(d2<0)
- d2 = -d2;
- if(d2>9){
- for(i = 0; i < 9; i++)
- while(d2 >= _am_asciiconv[i])
- d2 -= _am_asciiconv[i];
- while(d2 >= _am_asciiconv[i])
- {
- d2 -= _am_asciiconv[i];
- j++;
- }
- d2=j;
- }
-
- while(n >= _am_asciiconv[0])
- {
- n -= _am_asciiconv[0];
- dig[9]++;
- }
-
- while(n >= _am_asciiconv[1])
- {
- n -= _am_asciiconv[1];
- dig[8]++;
- }
-
-
- while(n >= _am_asciiconv[2])
- {
- n -= _am_asciiconv[2];
- dig[7]++;
- }
-
- while(n >= _am_asciiconv[3])
- {
- n -= _am_asciiconv[3];
- dig[6]++;
- }
-
- while(n >= _am_asciiconv[4])
- {
- n -= _am_asciiconv[4];
- dig[5]++;
- }
-
- while(n >= _am_asciiconv[5])
- {
- n -= _am_asciiconv[5];
- dig[4]++;
- }
-
- while(n >= _am_asciiconv[6])
- {
- n -= _am_asciiconv[6];
- dig[3]++;
- }
-
- while(n >= _am_asciiconv[7])
- {
- n -= _am_asciiconv[7];
- dig[2]++;
- }
-
- while(n >= _am_asciiconv[8])
- {
- n -= _am_asciiconv[8];
- dig[1]++;
- }
-
- dig[0]= n;
-
- if(x)
- return -(t-dig[d1-1]*_am_asciiconv[10-d1]+dig[d2-1]*_am_asciiconv[10-d1]-dig[d2-1]*_am_asciiconv[10-d2]+dig[d1-1]*_am_asciiconv[10-d2]);
- else
- return t-dig[d1-1]*_am_asciiconv[10-d1]+dig[d2-1]*_am_asciiconv[10-d1]-dig[d2-1]*_am_asciiconv[10-d2]+dig[d1-1]*_am_asciiconv[10-d2];
-
- }